#ifndef _SHAPE_H_
#define _SHAPE_H_

#include <glm/glm.hpp>
#include <string>

namespace SEngine
{
    class Shape 
    {   
    public:
        virtual ~Shape() = default;
        virtual std::string Name() = 0;
        virtual size_t Type() = 0;
        virtual void Transform(glm::mat4 matrix) = 0;
    };

    template<typename T>
    class ShapeCRTP : public Shape
    {
    public:
        virtual ~ShapeCRTP() = default;
        std::string Name() override { return typeid(T).name(); }
        size_t Type() override { return typeid(T).hash_code(); }
    };

} // namespace SEngine


#endif